package cn.rmshadows.joffice;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.AnchorPane;

public class PrimaryController implements Initializable {
	// 这是定义默认分割线位置
	final static double srsp_d_pos = 0.25;
	// 这是定义默认root split pane高度位置
	final static double sp_height = 50;
	static SplitPane sr_sp;
	// 是否更改功能视图
	public static boolean fv_change = false;
	// 當前视图
	public static int fv_index = -1;
	// textCmd.setAccelerator(new KeyCodeCombination(KeyCode.C,
	// KeyCombination.CONTROL_DOWN));
	
	// 菜单栏
	@FXML
	private MenuItem m_quit;
	@FXML
	private MenuItem m_about;
	
	// Root
	@FXML
	SplitPane root_sp;
	/**
	 * 一共分两个区域 A B
	 */
	// A area
	@FXML
	AnchorPane func_menu_ap;
	@FXML
	ListView<String> func_menu_lv;

	// B area
	@FXML
	AnchorPane func_view_ap;

	// 选择的功能
	static int selected_func = -1;
	// 当前功能的Node对象
	static AnchorPane current_fv;
	
	@FXML
	protected void quit(ActionEvent event) {
		System.exit(0);
	}
	
	@FXML
	protected void about(ActionEvent event) {
		Alert alert = new Alert(Alert.AlertType.INFORMATION); // 创建一个消息对话框
		alert.setHeaderText("帮助"); // 设置对话框的头部文本
		// 设置对话框的内容文本
		alert.setContentText("概述：Java Office办公套件\n"
				+ "功能：集合语音识别等功能为一体的一款跨平台应用，支持Linux和Windows。\n"
				+ "作者：Ryan Yim\n"
				+ "版本：v1.0.7 2021-08");
		alert.show(); // 显示对话框
	}

	/**
	 * 这个是初始化界面的方法
	 */
	@Override
	public void initialize(URL location, ResourceBundle resources) {
		// 功能列表
		String[] funcs = new String[] { "Vosk语音识别", "百度语音识别", "百度语音朗读", "百度文字识别" };
		sr_sp = root_sp;
		// 功能列表
		ObservableList<String> func_list = FXCollections.observableArrayList(funcs);
		func_menu_lv.setItems(func_list);

		// 监听列表当前选择的功能
		func_menu_lv.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
			@Override
			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
				if (newValue.intValue() == -1) {
					selected_func = newValue.intValue();
					// 清空
					func_view_ap.getChildren().get(0).setVisible(false);
//					System.out.println("Log：暂未选择功能。");
				} else if (newValue.intValue() == 0) {
					fv_change = true;
					fv_index = 0;
					selected_func = newValue.intValue();
//					System.out.println("Log：用户选择了Vosk离线语音识别。");
					try {
						current_fv = FXMLLoader.load(getClass().getResource("func_v/vosk.fxml"));
						// 初始化界面宽度
						double d_pos = root_sp.getDividers().get(0).positionProperty().doubleValue();
						current_fv.setPrefWidth(JofficeApp.scene.getWidth() * (1 - d_pos) - 8);
						current_fv.setPrefHeight(JofficeApp.scene.getHeight() - sp_height);
						func_view_ap.getChildren().setAll(current_fv);
					} catch (IOException e) {
						e.printStackTrace();
					}
				} else if (newValue.intValue() == 1) {
					fv_change = true;
					fv_index = 1;
					selected_func = newValue.intValue();
//					System.out.println("Log：用户选择了百度在线语音识别。");
					try {
						current_fv = FXMLLoader.load(getClass().getResource("func_v/baidu_speech_recognize.fxml"));
						double d_pos = root_sp.getDividers().get(0).positionProperty().doubleValue();
						current_fv.setPrefWidth(JofficeApp.scene.getWidth() * (1 - d_pos) - 8);
						current_fv.setPrefHeight(JofficeApp.scene.getHeight() - sp_height);
						func_view_ap.getChildren().setAll(current_fv);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}else if (newValue.intValue() == 2) {
					fv_change = true;
					fv_index = 1;
					selected_func = newValue.intValue();
//					System.out.println("Log：用户选择了百度在线语音朗读。");
					try {
						current_fv = FXMLLoader.load(getClass().getResource("func_v/baidu_tts.fxml"));
						double d_pos = root_sp.getDividers().get(0).positionProperty().doubleValue();
						current_fv.setPrefWidth(JofficeApp.scene.getWidth() * (1 - d_pos) - 8);
						current_fv.setPrefHeight(JofficeApp.scene.getHeight() - sp_height);
						func_view_ap.getChildren().setAll(current_fv);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}else if (newValue.intValue() == 3) {
					fv_change = true;
					fv_index = 1;
					selected_func = newValue.intValue();
//					System.out.println("Log：用户选择了百度在线文字识别。");
					try {
						current_fv = FXMLLoader.load(getClass().getResource("func_v/baidu_ocr.fxml"));
						double d_pos = root_sp.getDividers().get(0).positionProperty().doubleValue();
						current_fv.setPrefWidth(JofficeApp.scene.getWidth() * (1 - d_pos) - 8);
						current_fv.setPrefHeight(JofficeApp.scene.getHeight() - sp_height);
						func_view_ap.getChildren().setAll(current_fv);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}else {
					// 清空
					func_view_ap.getChildren().get(0).setVisible(false);
//					System.err.println("ERROR：func_menu_lv.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() 出行未匹配选项。");
				}
			}
		});

		// 检测分栏线位置,调整功能视图大小
		root_sp.getDividers().get(0).positionProperty().addListener(new ChangeListener<Number>() {
			@Override
			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
//				System.out.println(oldValue + "" + newValue);
//				System.out.println("DIVIDER"+JofficeApp.isResizing);
				// 不在调整窗口大小且有任务视图时
				if (!JofficeApp.isResizing && current_fv != null) {
					// 调整任务视图宽度
					current_fv.setPrefWidth(root_sp.getWidth() * (1 - newValue.doubleValue()) - 7);
				}
			}
		});

	}
}
